<?php

/**
 * Description of PublisherController
 *
 * @author Admin
 */
class Pub_PublisherController extends Zend_Controller_Action {

    public function init() {
        $this->_helper->layout->setLayout('Publisher');
    }

    public function indexAction() {
        
    }

    /**
     * управоение Web-сайтами 
     */
    public function controlwebsiteAction() {
        
    }

    /**
     * список сайтов публикатора 
     */
    public function websitesAction() {
        $obj = new Pub_Model_Publisher();
        $stat = new Pub_Model_Statistic();

        $id = Zend_Auth::getInstance()->getIdentity()->id;
        //статистика сайтов
        $sites = $obj->getAllPublisherSites($id);
        $active_sites = $stat->getPubStatisticSites($id, 1);
        $this->view->active_sites = $active_sites;
        $pending_sites = $stat->getPubStatisticSites($id, 2);
        $this->view->pending_sites = $pending_sites;
        $blocked_sites = $stat->getPubStatisticSites($id, 3);
        $this->view->blocked_sites = $blocked_sites;




        $keys = Array();
        foreach ($sites as $key => $value) {
            //получаем все ключевые слова для каждого сайта
            $getKeyWordsByIdSite = $obj->getKeyWordsByIdSite($value['id']);
            foreach ($getKeyWordsByIdSite as $_key => $_value) {
                //создаем массив с ключевыми словами текущего сайта
                $keys[$_key] = $_value['name'];
            }
            //создаем доп.поле 'key' в выбранном сайте
            //и записываем в него массив ключевых слов
            $sites[$key]['key'] = $keys;
            $keys = NULL;
        }
        $this->view->select = $sites;

        //статистика рекламных мест
        $total_adv = $stat->getAllPubAdvSpaces($id);
        $this->view->total_adv = $total_adv;
        $active_adv = $stat->getPubStatisticAdvSpaces($id, 1);
        $this->view->active_adv = $active_adv;
        $pending_adv = $stat->getPubStatisticAdvSpaces($id, 2);
        $this->view->pending_adv = $pending_adv;
        $blocked_adv = $stat->getPubStatisticAdvSpaces($id, 3);
        $this->view->blocked_adv = $blocked_adv;
    }

    /**
     * профиль публикатора 
     */
    public function profileAction() {
        $form = new Application_Form_Updateprofile();
        $this->view->form = $form;
        $id = Zend_Auth::getInstance()->getIdentity()->id;

        //если параметр id коректен
        if ($id > 0) {
            $profile = new Adv_Model_Advertiser();
            $form->populate($adv = $profile->showProfile($id));
            var_dump($adv);
            if ($this->getRequest()->isPost()) {
                $postdata = $this->getRequest()->getPost();
                if ($form->isValid($postdata)) {
                    $data = array(
                        'password' => md5($form->getValue('password')),
                        'email' => $form->getValue('email'),
                        'phone' => $form->getValue('phone'),
                        'address' => $form->getValue('address'),
                        'company_name' => $form->getValue('company_name'),
                        'website' => $form->getValue('website')
                    );
                    $profile->updateProfile($id, $data);
                    $this->_helper->redirector('index', 'Publisher');
                }
            }
        }
    }

    /**
     * Удаление выбранного сайта публикатором
     */
    public function deletesiteAction() {
        $id = $this->_getParam('id');
        $obj = new Pub_Model_Publisher();
        $obj->deleteSelectSite($id);
        $obj->deleteSiteKeywords($id);
        $this->_helper->redirector('websites', 'Publisher');
    }

    /**
     * Вывод статистики выбранного сайта
     */
    public function statisticsiteAction() {
        $id = $this->_getParam('id');
        $id_Pub = Zend_Auth::getInstance()->getIdentity()->id;
        $obj = new Pub_Model_Publisher();
        //выборка статистики выбранного сайта
        $site = $obj->getSelectSite($id);
        $this->view->site = $site;
        //выборка сайтов в селект для быстрой навигации
        $all_sites = $obj->getAllPublisherSites($id_Pub);
        $this->view->all_sites = $all_sites;
        //выборка кейвордов сайта
        $all_keywords = $obj->getAllSiteKeywords($id);
        $this->view->all_keywords = $all_keywords;
    }

    /**
     * Генерация баннеров
     */
    public function generateadvAction() {
        $id = Zend_Auth::getInstance()->getIdentity()->id;
        $obj = new Pub_Model_Publisher();
        //выборка для селекта типов рекламы
        $types = $obj->getAllAdvTypes();
        $this->view->types = $types;
        //выборка для селекта всех активных сайтов
        $sites = $obj->getAllPubActiveSites($id);
        $this->view->sites = $sites;
    }

    /**
     * Добавление сайтов
     */
    public function addsiteAction() {
        $form = new Application_Form_Addsite();
        $this->view->form = $form;
        $obj = new Pub_Model_Publisher();
        $id = Zend_Auth::getInstance()->getIdentity()->id;
        if ($this->getRequest()->isPost()) {
            $postData = $this->getRequest()->getPost();
            if ($form->isValid($postData)) {
                $data = array(
                    'url' => $form->getValue('url'),
                    'id_category_site' => $form->getValue('category'),
                    'id_status' => 2,
                    'id_Publisher' => $id
                );
                $id_site = $obj->addSite($data);
                $new_keywords = $form->getValue('keywords');
                //разбиваем по запятым кейворды, полученные из формы
                $keys = explode(',', $new_keywords);
                //перебираем каждое слово
                foreach ($keys as $key) {
                    $new_key = ltrim(rtrim($key));
                    //ищем кейворды с такими же именами в базе
                    $old_keywords = $obj->getSimilarKeywords($new_key);
                    if (!empty($old_keywords)) {
                        foreach ($old_keywords as $old_key) {
                            //если кейворды равны
                            if ($old_key['name'] === $new_key) {
                                //просто привязываем его к текущему сайту
                                $data_oldkey = array(
                                    'id_site' => $id_site,
                                    'id_keyword' => $old_key['id']
                                );
                                $obj->addKeywordToSite($data_oldkey);
                            }
                        }
                        //если совпадений не найдено
                    } else {
                        //записываем в базу кейворд
                        $data_newkey = array(
                            'name' => strtolower($new_key),
                            'id_bid' => 1
                        );
                        $id_keyword = $obj->addKeyword($data_newkey);
                        //и привязываем его к текущему сайту
                        $data_site = array(
                            'id_site' => $id_site,
                            'id_keyword' => $id_keyword
                        );
                        $obj->addKeywordToSite($data_site);
                    }
                }
            }
        }
    }

    /**
     * Счет публикатора, transaction
     */
    public function accountAction() {
        $obj = new Pub_Model_Publisher();
        $id = Zend_Auth::getInstance()->getIdentity()->id;
        //текущий счет
        $account = $obj->getAccount($id);
        //транзакции
        $transaction = $obj->getTransaction($id);
        $this->view->account = $account;
        $this->view->transaction = $transaction;
    }

    /**
     * Страница выбранного сайта
     */
    public function selectsiteAction() {
        $id = $this->_getParam('id');
        $obj = new Pub_Model_Publisher();
        //выборка информации выбранного сайта
        $site = $obj->getSelectSite($id);
        $this->view->site = $site;
        //выборка всех рекламных мест сайта
        $adv_space = $obj->getSiteAdvSpaces($id);
        $this->view->adv_space = $adv_space;
    }

    /**
     * Удаление выбранного рекламного места
     */
    public function deleteadvspaceAction() {
        $id = $this->_getParam('id');
        $id_site = $this->_getParam('site');
        $obj = new Pub_Model_Publisher();
        $obj->deleteAdvSpace($id);
        $this->getHelper('Redirector')
                ->gotoSimpleAndExit('selectsite', 'Publisher', 'Pub', array('id' => $id_site));
    }

    //Страница статистики выбранного рекламного места
    public function statisticadvspaceAction() {
        $id = $this->_getParam('id');
        $id_site = $this->_getParam('site');
        $obj = new Pub_Model_Publisher();
        //выборка информации выбранного рекламного места
        $adv_space = $obj->getSelectAdvSpace($id);
        $this->view->adv_space = $adv_space;
        //выборка всех рекламных мест в селект для быстрой навигации
        $adv_spaces = $obj->getSiteAdvSpaces($id_site);
        $this->view->adv_spaces = $adv_spaces;
    }

    public function reportadvspaceAction() {
        
    }

    /**
     * Активация/деактивация рекламного места публикатором
     */
    public function modeadvspaceAction() {
        $id = $this->_getParam('id');
        $param = $this->_getParam('param');
        //получаем id сайта, чтобы потом отредиректить 
        //юзера на него
        $id_site = $this->_getParam('site');
        $obj = new Pub_Model_Publisher();
        //если юзер кликнул по ссылке активации
        if ($param === 'activation') {
            //передаем id активации в базу
            $data = array(
                'id_status' => 1
            );
        } elseif ($param === 'deactivation') {
            //иначе id блокировки
            $data = array(
                'id_status' => 3
            );
        }
        $obj->changeModeAdvSpace($id, $data);
        $this->getHelper('Redirector')
                ->gotoSimpleAndExit('selectsite', 'Publisher', 'Pub', array('id' => $id_site));
    }

    /**
     * финансовая статистика 
     */
    public function financestatisticAction() {
        $obj = new Pub_Model_Statistic();
        $id_Pub = Zend_Auth::getInstance()->getIdentity()->id;
        $site = $obj->getPubStatisticSite($id_Pub);

        $keys = Array();
        foreach ($site as $key => $val) {
            //временный переменные для подсчета дохода
            $tempGain = 0;
            $tempGainBanner = 0;
            $tempGainContext = 0;

            $advSpace = $obj->getAllAdvSpacesSite($val['id']);
            $count = count($advSpace);
            $site[$key]['sum'] = $count;
            //выборка общего дохода сайта
            $totalGain = $obj->totalGainSite($id_Pub, $val['id']);
            //расчет общего дохода сайта
            if (!empty($totalGain)) {
                foreach ($totalGain as $tGain) {
                    $tempGain = $tempGain + $tGain['amount'];
                }

                $site[$key]['totalSiteGain'] = $tempGain;
            } else {
                $site[$key]['totalSiteGain'] = 0;
            }

            //выборка дохода сайта по баннерам
            $totalGainBanner = $obj->gainAdv($id_Pub, $val['id'], 1);
            //расчет общего дохода сайта за баннеры
            if (!empty($totalGainBanner)) {
                foreach ($totalGainBanner as $tGainBanner) {
                    $tempGainBanner = $tempGainBanner + $tGainBanner['amount'];
                }
                $site[$key]['totalGainBanner'] = $tempGainBanner;
            } else {
                $site[$key]['totalGainBanner'] = 0;
            }
            //выборка дохода сайта по контестной рекламме
            $totalGainContext = $obj->gainAdv($id_Pub, $val['id'], 2);
            //расчет общего дохода сайта за контекстную рекламу
            if (!empty($totalGainContext)) {
                foreach ($totalGainContext as $tGainContext) {
                    $tempGainContext = $tempGainContext + $tGainContext['amount'];
                }
                $site[$key]['totalGainContext'] = $tempGainContext;
            } else {
                $site[$key]['totalGainContext'] = 0;
            }
        }
        $this->view->site = $site;

        $currentDate = Zend_Date::now();
        $currentDay = intval($currentDate->get(Zend_Date::DAY));
        $currentMonth = intval($currentDate->get(Zend_Date::MONTH));

        $banner = 1;
        $context = 2;
        $blog = 3;
        $social = 4;
        $allProfit = $bannerProfit = $contextProfit = $blogProfit = $socialProfit = 0;
        $date = 0;
        $dayStatistic = Array();
        for ($day = 0; $day <= $currentDay; $day++) {            
            //выборка всех транзакций за текущей день
            $dayTransactions = $obj->getDayPubTransactions($day, $currentMonth);
            foreach ($dayTransactions as $val) {
                //подсчет суммы всех платежей за текущей день               
                $date = $val['date'];
                $allProfit = $val['sum(amount)'];
            }
            //выборка и подсчет всех транзакций баннеров
            $dayBannerTransactions = $obj->getDaySelectTransactions($day, $currentMonth, $banner);
            foreach ($dayBannerTransactions as $valBanner) {
                $bannerProfit = $valBanner['sum(amount)'];
            }
            //выборка и подсчет всех транзакций контекстной рекламы
            $dayContextTransactions = $obj->getDaySelectTransactions($day, $currentMonth, $context);
            foreach ($dayContextTransactions as $valContext) {
                $contextProfit = $valContext['sum(amount)'];
            }
            //выборка и подсчет всех транзакций микроблогов
            $dayBlogTransactions = $obj->getDaySelectTransactions($day, $currentMonth, $blog);
            foreach ($dayBlogTransactions as $valBlog) {
                $blogProfit = $valBlog['sum(amount)'];
            }
            //выборка и подсчет всех транзакций социальных сетей
            $daySocialTransactions = $obj->getDaySelectTransactions($day, $currentMonth, $social);
            foreach ($daySocialTransactions as $valSocial) {
                $socialProfit = $valSocial['sum(amount)'];
            }
            if ($date != null) {
                $dayStatistic[$day]['all_profit'] = round($allProfit, 2);
                $dayStatistic[$day]['banner_profit'] = round($bannerProfit, 2);
                $dayStatistic[$day]['context_profit'] = round($contextProfit, 2);
                $dayStatistic[$day]['blog_profit'] = round($blogProfit, 2);
                $dayStatistic[$day]['social_profit'] = round($socialProfit, 2);
                $dayStatistic[$day]['date'] = $date;
            }
            $bannerProfit = $allProfit = $contextProfit = $blogProfit = $socialProfit = null;
            $date = null;
        }
        $this->view->statistic = $dayStatistic;
    }

}

?>
